/*
 * @Date: 2022-07-24 21:43:47
 * @Description:
 */
/** 引入类型 */
import type { Route } from "./index.type";
import { dataList, filterAsyncRouters } from "./asyncRouter";
/** 引入路由相关的资源 */
import router, { modules, loginList } from "./index";
/** 引入vuex实例 */
import store from "@/store";

/** 动态路由实现基础组件 */
/** 引入全局Layout组件 */
import Layout from "@/layout/index.vue";
/** 引入多级菜单控制器组件 */
import MenuBox from "@/components/menu/index.vue";
/** 引入带有系统自定义name的组件，方便keep-alive实现 */
import { createNameComponent } from "./createNode";

/** 引入需要权限的Modules */
import Dashboard from "./modules/dashboard";
import Document from "./modules/document";
import Pages from "./modules/pages";
import Menu from "./modules/menu";
import Component from "./modules/component";
import Directive from "./modules/directive";
import SystemManage from "./modules/systemManage";
// 引入不需要权限的modules
import System from "./modules/system";
import { useRouter, useRoute } from "vue-router";
/** 登录后需要动态加入的本地路由 */
// const asyncRoutes: Route[] = [
//   ...Dashboard,
//   ...Document,
//   ...Component,
//   ...Pages,
//   ...Menu,
//   ...Directive,
//   ...SystemManage,
// ];

// let asyncRoutes: Route[] = [...Dashboard];
let asyncRoutes: Route[] = filterAsyncRouters((await dataList()) as any);

/**
 * @name 动态路由的权限新增，供登录后调用
 * @other 如果需要进行后端接口控制菜单的话，请在此拿到后端的菜单树与asyncRoutes对比，生成一个新的值
 */
async function addRoutes() {
  // console.log("开始");
  // console.log("asyncRoutes", asyncRoutes);

  // const res = await dataList();
  // console.log("请求过来的数据", res);

  // asyncRoutes = asyncRoutes.concat(filterAsyncRouters(res as []));
  // console.log("asyncRoutes", asyncRoutes);

  // 已验证完成，下面代码添加的可以实时同步至菜单中去，可以添加setTimeout(() => {}) 模拟异步代码的操作
  // 利用前端路由表模拟后端数据问题
  asyncRoutes.forEach((item) => {
    // console.log("开始遍历", item);

    modules.push(item);
    loginList.push(item);
    router.addRoute(item);
  });
  // console.log("modules===>", loginList);

  // console.log("router 遍历结束", asyncRoutes);

  // let modules1 = System;
  // System.map((item: any) => {
  //   loginList.push(item);
  // });

  // console.log("loginList====>", loginList);
}

/**
 * @des 登录了之后会执行这个方法，实现动态路由的功能
 */
export async function getAuthRoutes() {
  // 判断token是否存在，存在则调用添加路由的方法
  if (store.state.user.token) {
    await addRoutes();
  }
}
